home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / UNIXLIB37B / src / unix / c / open < prev    next >
Text File  |  1991-10-10  |  1KB  |  74 lines

  1. static char sccs_id[] = "@(#) open.c 1.4 "__DATE__" HJR";
  2.  
  3. /* open.c (c) Copyright 1990 H.Rogers */
  4.  
  5. #include <stdarg.h>
  6. #include <errno.h>
  7.  
  8. #include "fcntl.h"
  9.  
  10. #include "sys/unix.h"
  11. #include "sys/dev.h"
  12.  
  13. struct sfile __sfile[] = {
  14.     { "tty",makedev(DEV_TTY,0) },
  15.     { "console",makedev(DEV_TTY,0) },
  16.     { "rs423",makedev(DEV_TTY,0) },
  17.     { "null",makedev(DEV_NULL,0) },
  18.     { 0,makedev(DEV_RISCOS,0) } };    /* table terminator */
  19.  
  20. char *ttyname(void) { return("/dev/tty"); }
  21.  
  22. int open(register char *file,int oflag,...)
  23. {
  24. register struct file *f;
  25. va_list ap;
  26. register int mode;
  27. int fd;
  28. dev_t dev;
  29.  
  30. /* __uname() is called by __fsopen() */ 
  31.  
  32. if (oflag & O_CREAT)
  33.   {
  34.   va_start(ap,oflag);
  35.   mode = va_arg(ap,int);
  36.   va_end(ap);
  37.   }
  38. else
  39.   mode = 0777;
  40.  
  41. if ((fd = __fdalloc()) < 0) return(-1);
  42.  
  43. f = __u->file + fd; f->oflag = oflag;
  44.  
  45. if (file[0] == '/' && file[1] == 'd' && file[2] == 'e' &&
  46.     file[3] == 'v' && file[4] == '/')
  47.   {
  48.   register struct sfile *s = __sfile;
  49.   register char *s1,*s2; 
  50.  
  51.   while (s1 = s->name)
  52.     {
  53.     s2 = file + 5;
  54.  
  55.     while (*s1 && *s2 && *s1 == *s2) s1++,s2++; if (*s1 == *s2) break;
  56.     s++;
  57.     }
  58.   dev = s->dev;
  59.   }
  60. else
  61.   dev = makedev(DEV_RISCOS,0);
  62.  
  63.   {
  64.   register int i;
  65.  
  66.   if ((i = (*(__dev[major(dev)].open))(file,mode,f)) < 0) return(-1);
  67.   f->dev = makedev(major(dev),i);
  68.   }
  69.  
  70. f->dup = f; f->pid = __u->pid;
  71.  
  72. return(fd);
  73. }
  74.